
namespace ShoppingCart.WebSite.Admin
{
    using System;
    using System.Configuration;
    using System.IO;
    using System.Web.UI;
    using Business.Logic;
    using Code;
    using DTO = Business.Entity;

    public partial class Producto : BasePage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsPostBack) return;
            CargarLineas();
            CargarAccion();
        }

        protected void BtnGuardarClick(object sender, EventArgs e)
        {
            GuardarAccion();
        }

        private void CargarLineas()
        {
            var lineas = LineaManager.Instancia.Listar();
            BindControl<DTO.Linea>.BindDropDownList(ddlIdLinea, lineas);
        }

        private void CargarAccion()
        {
            var accion = Request.QueryString.Get("Accion");
            if (string.IsNullOrEmpty(accion))
                Response.Redirect("Productos.aspx", true);

            switch (accion)
            {
                case "I":
                    litAccion.Text = @"INGRESAR";
                    break;
                case "M":
                    var idProducto = Convert.ToInt32(Request.QueryString.Get("IdProducto"));
                    CargarProducto(idProducto);
                    litAccion.Text = @"MODIFICAR";
                    break;
            }
        }

        private void CargarProducto(int idProducto)
        {
            var entidad = ProductoManager.Instancia.Obtener(idProducto);
			txtNombre.Text = entidad.Nombre;
			txtDescripcion.Text = entidad.Descripcion;
			ddlIdLinea.SelectedValue = entidad.Linea.IdLinea.ToString();
			chkEstado.Checked = entidad.Estado;
        }

        private void GuardarAccion()
        {
            var accion = Request.QueryString.Get("Accion");
            switch (accion)
            {
                case "I":
                    InsertarProducto();
                    break;
                case "M":
                    ModificarProducto();
                    break;
            }
        }

        private void InsertarProducto()
        {
            var extension = string.Empty;
            var ruta = ConfigurationManager.AppSettings["Producto"];
            var entidad = new DTO.Producto
            {
                Nombre = txtNombre.Text,
                Descripcion = txtDescripcion.Text,
                Icono = string.Empty,
                Imagen = string.Empty,
                Estado = chkEstado.Checked,
                Linea = new DTO.Linea { IdLinea = Convert.ToInt32(ddlIdLinea.SelectedValue) }
            };
            if (fupImagen.HasFile)
            {
                extension = Path.GetExtension(fupImagen.PostedFile.FileName).ToLower();
                if (extension == ".jpg" || extension == ".gif" || extension == ".bmp" || extension == ".png")
                {
                    entidad.Icono = extension;
                    entidad.Imagen = ruta;
                }
            }
            try
            {
                var idProducto = ProductoManager.Instancia.Agregar(entidad);
                if (fupImagen.HasFile)
                {
                    var rutaIcono = Request.MapPath(ruta) + "Icono" + idProducto + extension;
                    var rutaImagen = Request.MapPath(ruta) + "Imagen" + idProducto + extension;
                    var file = fupImagen.PostedFile;
                    SaveImage(rutaIcono, file);
                    fupImagen.SaveAs(rutaImagen);
                }
                ClientScript.RegisterStartupScript(GetType(), "mostrar1", "alert('Registro grabado satisfactoriamente');window.location = 'Productos.aspx';", true);
            }
            catch
            {
                litAccion.Text = GetMessage(@"No se pudo Modificar Producto, por favor intente de nuevo o más tarde.", MessageType.errormsg);
            }
        }

        private void ModificarProducto()
        {
            var idProducto = Convert.ToInt32(Request.QueryString.Get("idProducto"));
            var entidad = ProductoManager.Instancia.Obtener(idProducto);
            var ruta = ConfigurationManager.AppSettings["Producto"];
            
			entidad.Nombre = txtNombre.Text;
			entidad.Descripcion = txtDescripcion.Text;
            entidad.Linea.IdLinea = Convert.ToInt32(ddlIdLinea.SelectedValue);
			entidad.Estado = chkEstado.Checked;
            if (fupImagen.HasFile)
            {
                var extension = Path.GetExtension(fupImagen.PostedFile.FileName).ToLower();
                if (extension == ".jpg" || extension == ".gif" || extension == ".bmp" || extension == ".png")
                {
                    entidad.Icono = ruta + "Icono" + idProducto + extension;
                    entidad.Imagen = ruta + "Imagen" + idProducto + extension;
                }
            }
            try
            {
                ProductoManager.Instancia.Modificar(entidad);
                if (fupImagen.HasFile)
                {
                    var rutaIcono = Request.MapPath(entidad.Icono);
                    var rutaImagen = Request.MapPath(entidad.Imagen);
                    var file = fupImagen.PostedFile;
                    SaveImage(rutaIcono, file);
                    fupImagen.SaveAs(rutaImagen);
                }
                ClientScript.RegisterStartupScript(GetType(), "mostrar2", "alert('Registro grabado satisfactoriamente');window.location = 'Productos.aspx';", true);
            }
            catch
            {
                litAccion.Text = GetMessage(@"No se pudo Modificar Producto, por favor intente de nuevo o más tarde.", MessageType.errormsg);
            }
        }
    }
}
